package py.com.sole.dao.impl;

import java.util.List;

import javax.persistence.EntityManager;
import javax.persistence.Query;

import py.com.sole.dao.DaoFactory;
import py.com.sole.dao.InstitucionDao;
import py.com.sole.model.Institucion;

public class InstitucionImpl implements InstitucionDao {

  EntityManager em = DaoFactory.getEm();

  @Override
  public void addInstitucion(Institucion institucion) {
    try {
      em.getTransaction().begin();
      em.persist(institucion);
      em.getTransaction().commit();

    } catch (Exception e) {
      e.printStackTrace();
    }

  }

  @Override
  public void deleteInstitucion(int id) {
    try {
      em.getTransaction().begin();
      em.remove(this.getInstitucionById(id));
      em.getTransaction().commit();
    } catch (Exception e) {

    }
  }

  @SuppressWarnings(value = "all")
  @Override
  public List<Institucion> getInstituciones() {
    return em.createQuery("SELECT i FROM Institucion i WHERE i.activo=TRUE").
      getResultList();
  }

  @Override
  public void updateInstitucion(Institucion institucion) {
    try {
      em.getTransaction().begin();
      em.merge(this.getInstitucionById(institucion.getId()));
      em.getTransaction().commit();
    } catch (Exception e) {

    }

  }

  @Override
  public Institucion getInstitucionById(int id) {
    return (Institucion) em.createQuery("SELECT i FROM Institucion i where i.id = " + id).getSingleResult();
  }

  @Override
  public Institucion getInstitucionByName(String value) {
    try {
      Query q = em.createNamedQuery("Institucion.findByDescripcion");
      q.setParameter("descripcion", value);
      return (Institucion) q.getSingleResult();
    } catch (Exception e) {
      return null;
    }

  }

}
